import { defineStore } from "pinia";

export const useUserStore = defineStore("user", {
    // 定义状态，初始化时从 localStorage 读取数据
    state: () => {
        return {
            // 如果 localStorage 中有 token 则使用，否则为空字符串
            token: localStorage.getItem('token') || '',
            // 如果 localStorage 中有用户信息则解析并使用，否则为空对象
            userInfo: (() => {
                try {
                    const userInfo = localStorage.getItem('userInfo')
                    return userInfo ? JSON.parse(userInfo) : {}
                } catch (error) {
                    return {}
                }
            })()
        };
    },
    actions: {
        // 设置 token 并同时存入 localStorage
        setToken(token) {
            this.token = token;
            localStorage.setItem('token', token);
        },
        // 设置用户信息并同时存入 localStorage
        setUseInfo(userInfo) {
            this.userInfo = userInfo;
            localStorage.setItem('userInfo', JSON.stringify(userInfo));
        },
        // 退出登录时清除所有用户数据
        clearUserInfo() {
            // 清除 Pinia 中的数据
            this.token = '';
            this.userInfo = {};
            // 清除 localStorage 中的数据
            localStorage.removeItem('token');
            localStorage.removeItem('userInfo');
        },
    },
    // 使用 localStorage 进行持久化存储
    persist: {
        storage: localStorage,
    },
});